#ifndef __LIST_NODE_TAB_H
#define __LIST_NODE_TAB_H

#include "stdint.h"

#ifdef __cplusplus
extern "C"
{
#endif

	struct dlist_node_str
	{
		struct dlist_node_str *prev;
		struct dlist_node_str *next;
		int32_t element;
	};

	int8_t dlist_cycle_root_init(struct dlist_node_str *root_node); 
	int8_t dlist_line_root_init(struct dlist_node_str *root_node);	

	int8_t dlist_node_add(
		struct dlist_node_str *base,
		struct dlist_node_str *node,
		int8_t mode);

	int8_t dlist_cycle_elememt_sort_add(struct dlist_node_str *root_node, struct dlist_node_str *node);
	
	int8_t dlist_node_del(struct dlist_node_str *node);

	int8_t dlist_cycle_multi_element_del(
		struct dlist_node_str *root_node,
		int32_t element, void (*back)(struct dlist_node_str *des));

	int8_t dlist_cycle_one_element_del(
		struct dlist_node_str *root_node,
		int32_t element, struct dlist_node_str **back);

	int8_t dlist_cycle_element_search(
		struct dlist_node_str *root_node,
		int32_t element,
		struct dlist_node_str **back,
		int8_t mode);

	int8_t dlist_abs_element_search(
		struct dlist_node_str *root_node,
		int32_t element,
		struct dlist_node_str **back,
		int8_t mode);

	struct slist_node_str
	{
		struct slist_node_str *next;
		int32_t element;
	};
	
	int8_t slist_cycle_node_add(struct slist_node_str **list, struct slist_node_str *prev, struct slist_node_str *node);
	
	int8_t slist_cycle_elememt_sort_add(struct slist_node_str **list, struct slist_node_str *node);
	
	int8_t slist_cycle_node_del(struct slist_node_str **list, struct slist_node_str *node);
	
	int8_t slist_cycle_element_del(struct slist_node_str **list, int32_t element, struct slist_node_str **back);
	
	int8_t slist_cycle_element_search(struct slist_node_str **list, int32_t element, struct slist_node_str **back);

#ifdef __cplusplus
}
#endif

#endif 
